Audio coding refers to the transformation of audio data such that the characteristics of the encoded audio data better match the capabilities and constraints of a particular communications network or storage medium. Audio coding is typically coded in order to achieve compression, whereby the representation of audio data is transformed in such a way that the required storage and transmission rate requirements over a network are reduced. Although compression is often the primary goal of audio coding, other characteristics of the audio data, such as the degree of audible degradation caused by audio transmission over an unreliable network, can also be beneficially controlled by coding. An audio codec comprises a mathematical algorithm (although the term “audio codec” may also be used to refer to hardware and/or software embodiments of the algorithm) to apply audio encoding and decoding. Examples of popular audio codecs include MP3, Advanced Audio Coding (AAC) and Free Lossless Audio Codec (FLAC).
Many audio codecs offer options whereby a user can adjust their operation to obtain different performance trade-offs. A common option is the ability to trade off the degree of compression against the computational complexity of the algorithm. At one extreme setting of this option, a codec will expend a huge amount of computational effort in compressing the audio to the fullest extent it can achieve. This results in high compression levels, but also requires more processing time and resources from the computer or embedded device carrying out the audio processing. Depending on the coding approach, the high degree of compression may also increase the degree of audio quality loss attributed to the coding process. Setting the coding option to the opposite extreme yields a very simple and fast coding algorithm, at the expense of reduced levels of audio compression. Some codecs offer other simple options to tailor the operation of the coding algorithms to tune performance measures other than compression levels and computational complexity, although this is a less-common feature.
Although modern audio codecs offer the ability to adapt their operation and hence levels of performance using simple optional settings, there are limitations on this flexibility. Many codec implementations only allow options to be set or changed at the beginning of a particular audio file or data stream and do not provide an intuitive and transparent means to adjust options in real-time, as the data from the audio file or stream is being processed. Whilst the trade-off between levels of compression and computational complexity is well supported by several audio codecs, complex trade-offs between large numbers of relevant performance characteristics are not catered for. The configurable aspects of conventional audio codecs are not self-adapting and self-optimising. Any adaptation or optimisation of the audio coding approach has to be explicitly handled by the designer of the system that contains the audio codec. The system designer must deduce the complex mathematical relationships between real-time changes in the system characteristics and the optimal updated values for the configurable options of the audio codec.
Accordingly, it would be advantageous to provide an audio codec that can autonomously, rapidly and jointly adapt its operation to provide optimal audio coding performance given knowledge of at least one of the short-term characteristics of the audio data, the short-term performance of the system and communications network external to the codec, the capabilities and constraints of the hardware implementing the system and the relative short-term priorities the system places on different measures of audio coding performance. Since the adaptation of the audio coding techniques considers optimisation of a mathematical objective function based on several weighted performance measures, an audio codec that is compliant with this scheme would be carrying out a form of autonomous multidimensional adaptation.